import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // 1. 取出token
  const { token } = getApp()
  // 2. 定义一个公共的请求头对象(放公共的属性)
  const defaultHeader = {}
  if (token) defaultHeader.Authorization = token
  // 3. 把页面中的请求头对象和公共的请求头对象合并(页面的请求头必须放在后面)
  options.header = Object.assign(defaultHeader, options.header)
  return options
}

// 配置响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  // console.log(statusCode, data, config)
  const app = getApp()

  // 1. 判断token失效并延长token
  if (statusCode === 401) {
    // ------------判断refreshToken也失效-begin-------------------
    if (config.url.includes('/refreshToken')) {
      // 2.0.1 获取页面栈
      const pageStack = getCurrentPages()
      // 2.0.2 取出当前页面对象
      const currentPage = pageStack[pageStack.length - 1]
      // 2.0.3 取出当前页面对象的路径
      const redirectURL = currentPage.route
      // 2.1 拦截去登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    // -------------判断refreshToken也失效-end------------------

    // 1.1 调用接口
    const res = await wx.http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refreshToken,
      },
    })
    // 1.2 更新全局和本地的token以及refreshToken
    if (res.code !== 10000) return
    app.setToken(res.data.token)
    app.setRefreshToken(res.data.refreshToken)

    // console.log(config)
    //-------------无感请求(把之前的请求再次发送)-begin---------------
    return wx.http(Object.assign(config, { header: { Authorization: app.token } }))
    //-------------无感请求(把之前的请求再次发送)-end---------------
  }

  // 拦截器处理后的响应结果
  return data
}

// 挂载全局对象
wx.http = http

// 默认导出
export default http
